package edu.neuq.inner;

//匿名类传递操作：
//单独拿一个函数出来用——匿名类加一层皮成为一个类再调用

public class AnonymousLuncher {
	
	public static void call(AInter para){//call需要一个对象作为参数，该对象必须实现AInter接口
		para.FuncA();//方法名 参数列表 方法体
	}
	
	//同样的代码，在C里边怎么写？
//	void call(FuncA)//函数指针
	
	static class Para implements AInter{//可以创建一个类实现接口

		@Override
		public void FuncA() {
			// TODO 自动生成的方法存根
			
		}
		
	}

	public static void main(String[] args) {//main方法是静态方法
		call(new Para());//普通的做法,类创建实例
		
		//通过接口创建了一个匿名类
		call(new AInter(){//new AInter()//表示该匿名类需要实现AInter接口，{}中的是该匿名类的实体

			@Override
			public void FuncA() {//仅仅使用一次（没名字）
				// TODO 自动生成的方法存根
				
			}
			
		});//使用匿名类
		
		//通过继承创建一个抽象类
		AClass a=new AClass(){

			@Override
			public void fun() {
				// TODO 自动生成的方法存根
				
			}//该实例必须是AClass的子类
		};
		//lambda表达式的用法,定义一个匿名函数
		//call需要一个实现了单方法接口的实例
		//可以用 ()->{System.out.println("this is lambda");}  ()表示定义了一个函数，()中可以有函数的参数列表，{}中就是这个函数体
		call(()->{System.out.println("this is lambda");});//函数定义简单
		//call拿表达式当作funA处理
		//怎么用表达式写一个递归程序？
	}

}
